package com.bbx.taxi.client.Activity.Main;

import android.animation.LayoutTransition;
import android.content.Intent;
import android.view.View;

import com.baidu.mapapi.model.LatLng;
import com.bbx.api.sdk.model.passanger.CouponUsableBulid;
import com.bbx.api.sdk.model.passanger.Return.ActivityContent;
import com.bbx.api.sdk.model.passanger.Return.CarType.CarData;
import com.bbx.api.sdk.model.passanger.Return.CarType.NewCarType;
import com.bbx.api.sdk.model.passanger.Return.Coupon.Coupons;
import com.bbx.api.sdk.model.passanger.Return.CouponCount;
import com.bbx.api.sdk.model.passanger.Return.Elements;
import com.bbx.api.sdk.model.passanger.Return.LeadStopsGetNearbys;
import com.bbx.api.sdk.model.passanger.Return.MyOrderList.MyOrderList;
import com.bbx.api.sdk.model.passanger.Return.Price;
import com.bbx.api.sdk.model.passanger.Return.UsableSale;
import com.bbx.taxi.client.Bean.Message.ObserverListener.DATA_STATUS;
import com.yanxuwen.loadview.LoadingDialog;

import java.util.ArrayList;
import java.util.List;

/**
 * @Path com.bbx.taxi.client.Activity.Main.IMainContract.java
 * @Author 严旭文
 * @Date 2016-8-22 上午9:05:50
 * @Company 蓝海（福建）信息技术有限公司
 * @Description
 */
public class IMainContract {
	public static enum LastAddr{
		start,end
	}
	/**
	 * 共享试图的类型，如出发地，目的地，shareall主要是一些共享的东西，如start,end,time,name,taxi
	 * */
	public static enum SHAREVIEW_TYPE2 {
		all, shareall, start, end, time, name, name2, taxi, pcbc, location, thanks_fee
	}

	/**
	 * 共享试图的类型，如全部，拼车，还是包车,share包含的是拼车包车快件,但不包含市内
	 * */
	public static enum SHAREVIEW_TYPE {
		all, share, pc, kj, sn
	}
	public static enum RESETVIEW{
		all,start,end
	}

	public interface ViewMain {
		/** 重置试图 ,判断是重置全部还是出发地还是目的地*/
		public void resetView(RESETVIEW reset);
		
		public void init();

		/** 实例化城际市内的拖动条 */
		public void initSlideBar();

		/** 实例化一些数据，主要一些数据 */
		public void initData();

		/** 处理一些名字跟电话 */
		public void initName();

		/** 显示市内 */
		public void showSN();

		/** 显示城际 */
		public void showCJ();

		/** 显示快件 */
		public void showKJ();
		
		/**设置左上角的图标*/
		public void setTitleLeft();

		/**
		 * 显示市内时间，，只有市内时间可以隐藏跟关闭 all代表市内跟城际一起
		 * */
		public void showSnOrKjTime(boolean isShow, boolean all);
        
		/**实例化价格布局，在showSN,showCJ,showKJ显示的时候初始化*/
		public void initPriceInfo();
		/** 显示价格信息，根据当前类型显示 ,3个地方调用，
		 * 1.是普通价格请求完成onPrice，
		 * 2.是计价服务，请求到选择日租的时候【包车情况，因为市内的计价服务不走日租】
		 * 3.是市内的计价服务请求成功的时候。
		 * */
		public void showPriceInfo();

		/** 隐藏价格信息，根据当前类型显示 */
		public void hidePriceInfo(boolean all);

		/** 显示联系人信息，根据当前类型显示 */
		public void showContactInfo();

		/** 隐藏联系人信息，根据当前类型显示 */
		public void hideContactInfo(boolean all);
        /**显示与隐藏优惠劵加载*/
		public void setCouponProgressBar(boolean isVisible);
		
		/**显示与隐藏价格加载*/
		public void setPriceProgressBar(boolean isVisible);
		
		/** 弹窗时间选择器 */
		public void showTimeSelector(View v);

		/** 设置感谢费 */
		public void setThanks_fee();

		/** 设置消息 */
		public void setHandler(int msg);

		/** 通知栏点击 */
		public void notifiExtras(int order_status, String order_id);

		/** 显示几笔订单，并设置一些相关文字 */
		public void showOrderListIng(int isVisible, String title);

		/** 订单提交成功 */
		public void onOrderSubmitFinish();

		/** 设置确定按钮的显示跟隐藏 */
		public void setConfirm(boolean isShow);
		
		/**灰话跟隐藏*/
		public void setEnabled(boolean isEnanled);
		
		/**价格提醒，如市内的以计价器为准，城际的价格请咨询客服*/
		public void showPriceRemind(boolean isShow,String text);
		
		public boolean getPriceRemid();
		
		/**设置优惠劵信息，也就是选择可用优惠劵后返回调用的*/
		public void setCouponResult(Intent data);
		/** 设置优惠劵信息 */
		public void setCouponInfo(double coupon_sum, int coupon_type,
				int coupon_id);
		
		/**清空优惠劵*/
		public void clearCouponInfo();

		/** 显示拼车或者包车顺风界面 */
		public void showCjType();
		
		public enum CITYTYPE{
			APP,TEL,NOCITY;
		}
		/**判断市内类型*/
		public void showCityType();
		
		/** 显示市内类型，如打电话，没开通，正常下单*/
		public void showCityType(CITYTYPE type);

		/** 显示有可用的优惠劵， */
		public void showHasCoupon();

		/** 显示具体的优惠几元 */
		public void showdetaileCoupon();

		/** 隐藏优惠劵信息，就是没有优惠劵 */
		public void hideCoupon();

		/** 隐藏所有的价格信息包括优惠劵 */
		public void hideCouponAndPriceInVisible();

		/** 隐藏所有的价格信息包括优惠劵【】 */
		public void hideCouponAndPriceGone();

		public void showMap();

		/** 弹出没有顺风车弹框 */
		public void showNoSfDailog();

		/**设置view内容，isContentFilling用于是否去判断信息填满，填满则请求价格或者车型*/
		public void shareViewSN(boolean isContentFilling);

		/**设置view内容，isContentFilling用于是否去判断信息填满，填满则请求价格或者车型*/
		public void shareViewCJ(boolean isContentFilling);

		/**设置view内容，isContentFilling用于是否去判断信息填满，填满则请求价格或者车型*/
		public void shareViewKJ(boolean isContentFilling);
		
		/**滚动试图到底部*/
		public void fullScroll();

		/** 设置出发地的推荐字的显隐性 */
		public void setRecommendStartVisibility(boolean isVisible);

		/** 设置目的地推荐字的显隐性 */
		public void setRecommendEndVisibility(boolean isVisible);

		/** -----------------接口返回处理---------------------- */
		/** 优惠券信息*/
		public void onCouponCount(CouponCount mCouponCount);
		
		/**  活动 */
		public void onActivity(final ActivityContent mActivityContent);

		/** 请求价格结果 */
		public void onPrice(DATA_STATUS STATUS, Object object);
		
		/**市内跟包车的计价服务*/
		public void onMeteredFee( Object object);

		/** 加载汽车类型 ,注意mCarType数据一定要经过dealCarType处理后，才传递过来，不能由后台加载完就传递过来*/
		public void loadCarType(NewCarType mNewCarType,boolean isThanksfee);
		
		/**根据车型id选择该车型*/
		public void setCar(String car_class_id,double thanks_fee);
		
		/**隐藏汽车类型*/
		public void hideCarType(boolean isAll);
		/**选择汽车类型*/
		public void chooseCarType(int id,boolean isThanksfee);
		/**显示日租类型*/
		public void showRent(List<Integer> lits_bussiness,boolean isThanksfee);
		/**选择日租类型,判断是否在跳转到感谢费详情*/
		public void chooseRent(int id,boolean isThanksfee);
		/** 显示推荐上车 */
		public void onTuijian(LeadStopsGetNearbys mLeadStopsGetNearbys);
		/**显示下单立减活动*/
		public void onUsableSale(UsableSale mUsableSale);

		/** -----------以下为地图------------ */
		/**定位处理*/
        public void onLocationDeal();
        /**定位成功,显示地址，由于怕定位速度太快，导致，视图还没显示出来就，显示文字了
         * 所以要先判断试图是否已经显示出来了，显示出来才显示文字
         * */
        public void onLocationShowAddress(String lat, String lng);
		/**  实例化地图 */
		public void initmap();
		
		public void showMyLocationView();
		
		public void hideMyLocationView();

		/** 设置中心点位置 */
		public void setCenterPoint(double lat, double lng, final float zoom);

		/** 设置中心点位置 */
		public void setCenterPoint(LatLng centll, final float zoom);

		/**
		 * 设置中心点位置,改方法是根据当前试图的出发地跟目的地的中心点来设置中心点的 如果没有出发地，则设置当前定位的位置
		 */
		public void setCenterPoint();

		/**
		 * 设置为出发地为中心点，如果有目的地，则会自动设置出发地跟目的地的中心点 注意：
		 * isRemoveListener true, 不会重新获取地址，只是单纯的移动
		 * isRemoveListener false,会重新定位地址
		 */
		public void setStartPoint(boolean isRemoveListener);
		/** 在线上价格信息的时候，计算地图中心的高度 */
		public void calculateMapCenterHeight();
		
		/**计算头部高度*/
		public void calculateTopHeight();

		/** 设置地图中心高度 */
		public void setMapCenterHeight();
		/**清除中心点的高度*/
		public void clearMapCenterHeight();
		/**获取试图高度*/
		public int getIsViewContentHeight();

		/** 地理编码搜索 */
		public void onGeoCoder(double latitude, double longitude);

		/** 
		 * isAll
		 * false  默认清除出发地跟目的地覆盖物,根据类型如果是市内顺便清除推荐上车点的覆盖物
		 * true   则清除全部的覆盖物
		 * */
		public void clearMarker(boolean isAll);
		
		/**清空附近的车辆*/
		public void clearMarker_Fujian();

		/** 显示起点跟终点的标注 */
		public void showStartAndEnd();

		/** 清除附件的车辆 */
		public void postDelayed_Near();

		/** 显示或者隐藏中心定位图标 */
		public void MypositionVisibility(int VISIBLE);
		
		public void requesTuiJian(String lat,String lng);
		
		public void clearTuijian();
		/**跳转到登录界面*/
		public void startActivityLogin();
		
		/**设置锚点的显示跟隐藏以及文字*/
		public void setAnchor();
		/**设置倍数文字*/
		public void setBaseDiscountText();
		/**隐藏价格的具体信息*/
		public void hidePriceDetail();
		/**显示感谢费提醒的Drag*/
		public void showDragThanks();
		/**显示加价提醒的Drag*/
		public void showDragAddFee();
		/**显示费用详情提醒的Drag*/
		public void showDragPrice();
		
	}
	public interface Presenter {
		/**清空出发地，只是单纯的，把出发地清空掉而已，不做任何试图改变，最好要mian的resetView重置试图配合使用*/
		public void clearStart();
		/**清空目的地，只是单纯的，把出发地清空掉而已，不做任何试图改变，最好要mian的resetView重置试图配合使用*/
		public void clearEnd();
		/** 重新定位,最好要mian的resetView重置试图配合使用*/
		public void onStartLocation();
		/** 共享试图 ,默认isContentFilling为true*/
		public void shareView(SHAREVIEW_TYPE type, SHAREVIEW_TYPE2 type2);
		/** 共享试图 ,isContentFilling用于是否去判断信息填满，填满则请求价格或者车型*/
		public void shareView(SHAREVIEW_TYPE type, SHAREVIEW_TYPE2 type2,boolean isContentFilling);

		/** 通知栏点击 */
		public void setNotifiExtras(Intent intent);

		/** 设置显示有多少笔进行中的订单 */
		public void showOrderListIng(boolean isNet, ArrayList<MyOrderList> list);

		/** 设置Elements，用于提交订单和获取价格 */
		public void setElements();
		
		/**设置提单信息，提单跟获取立减活动需要*/
		public void setOrderSubmit();

		/** 设置价格信息 
		 * car_class_id  车型id  
		 * isMeteredFee  是否不请求价格，替换成计价服务，，当然isMeteredFee为true却为包车或者市内
		 * 不是特殊情况请传true，，只有包车的单程的时候才传false因为包车的单程要走，，，价格服务，不走计价服务
		 * */
		public void setPriceInfo(String car_class_id,boolean isMeteredFee);

		/** 设置优惠劵信息 */
		public void setCouponInfo(Object object);

		/** 请求获取可用优惠劵 */
		public void getCouponUsable(long price);
		
		/**设置获取可用优惠劵信息*/
		public void setCouponUsableBulid(CouponUsableBulid mCouponUsableBulid);
		/**设置获取可用优惠劵信息*/
		public CouponUsableBulid getCouponUsableBulid();

		/** 提交订单，先默认不允许优惠劵 */
		public void onOrderSubmit();

		/** 写入数据库，并且做一些提交订单完成操作 */
		public void onWriteDB_ing(ArrayList<String> orderIdList);

		/** 推荐上车点 ,改为只//有目的地才调用，也就是省钱秘籍切换的时候才调用。，原先的定位调用改完，用地图来做
		 *  出发地的推荐都是用地图来做
		 * */
		public void setRecommend(boolean isStart);

		public void setRecommendForOrderTimeChanged();

		/** 显示起点跟终点的标注 */
//		public void showStartAndEnd();

		/** 获取比例尺 */
		public float getZoom();

		/** 设置中心点的经纬度 */
		public void setCenterPoint(LatLng center, float zoom);

		/** 获取中心点的经纬度 */
		public LatLng getCenterPoint();

		/** 重置中心点 */
		public void resetCenterPoint();

		/** 获取Elements */
		public List<Elements> getElements();

		/** 获取进行中的订单列表 */
		public List<MyOrderList> getOrderListIng();

		/** 获取优惠劵列表 */
		public List<Coupons> getCouponsList();

		/** 获取上一次离开界面的订单类型，根据订单类型显示不同界面 **/
		public void getLastOrderType();

		public List<SHAREVIEW_TYPE2> getShareListPc();

		public List<SHAREVIEW_TYPE2> getShareListKj();

		public List<SHAREVIEW_TYPE2> getShareListSn();

		/** 判断是否是在包车界面 */
		public boolean getIsBC();

		/** 根据当前viewid获取订单类型 */
		public String getOrderType();

		public void setLineId(String line_id);

		public String getLineId();

		public void setCouponId(int coupon_id);

		public int getCouponId();
		
		/**设置车型id*/
		public void setCarClassId(String car_class_id);
		/**获取车型的id*/
		public String getCarClassId();		
		/**设置的车型第几个*/
		public void setCarTypeId(int CarType_id);
		/**获取的车型第几个*/
		public int getCarTypeId();
		/**设置车型的日租类型*/
		public void setRentId(int rent_id);
		/**获取车型的日租类型*/
		public int getRentId();
		/**设置Price_id*/
		public void setPriceId(String price_id);
		
		public String getPriceId();
        /**线路价格，以【分】为单位*/
		public void setPrice(long price);
		/**线路价格，以【分】为单位*/
		public long getPrice();
		/**优惠劵价格，以【分】为单位*/
		public void setCouponSum(double coupon_sum);
		/**优惠劵价格，以【分】为单位*/
		public double getCouponSum();
		/**需支付价格，以【分】为单位,需要价格，优惠劵，跟感谢费，*/
		public void setActualprice(double price,double coupom_sum,double thanksfee);
		/**需支付价格，以【分】为单位*/
		public double getActualprice();
		/**起步价*/
		public void setComboPrice(long combo_price,long night_combo_price);
		/**起步价*/
		public long getComboPrice();
		/**折扣，注意不打折传100，8折传80*/
		public void setBaseDiscount(double base_discount);
		/**折扣,注意setBaseDiscount有/100，所以1代表不带着，<1代表打折，>1则代表加价*/
		public double getBaseDiscount();
		/**折扣后的价格，主要用于来显示而已,分为单位,当setPrice调用的时候，马上回自动调用setDiscountPrice*/
		public void setDiscountPrice();
		/**折扣后的价格，主要用于来显示而已,分为单位*/
		public long getDiscountPrice();
		/**原价,单位分*/
		public void setBasePrice(double base_price);
		/**原价，单位分*/
		public double getBasePrice();
		/**设置立减活动类型*/
		public void setSaleType(int sale_type);
		/**获取立减活动类型*/
		public int getSaleType();
		/**设置立减活动金额*/
		public void setSaleAmount(double sale_amount);
		/**获取立减活动金额*/
		public double getSaleAmount();
		/**设置立减活动id*/
		public void setSaleId(String sale_id);
		/**获取立减活动id*/
		public String getSaleId();
		/**判断是否有立减活动*/
		public boolean getIsSale();
		/**临时存储UsableSale的值*/
		public void setUsableSale(UsableSale mUsableSale);
		/**获取临时存储的UsableSale*/
		public UsableSale getUsableSale();
		
		/**清楚价格信息*/
		public void clearPriceInfo();
		/**价格请求完成,判断是请求成功还是失败*/
		public void finishPriceInfo(boolean isSuccess);
        
		/**判断是否开启请求价格*/
		public void setIsPrice(boolean isPrice);

		public boolean getIsPrice();

		public void setPriceDetail(Price.Pricedetail price_detail);

		public Price.Pricedetail getPriceDetail();

		public void setViewId(int viewId);

		public int getViewId();
		
		/** 设置起始感谢费 */
		public void setStartThanksFee(double startthanlsfee);
		/**获取起始感谢费,单位分*/
		public double getStartThanksFee();

		public LoadingDialog getLoadView();

		public boolean isNoNullSn();

		public boolean isNoNullPc();

		public boolean isNoNullBc();

		public boolean isNoNullKj();

		public boolean isNoNull(String s);

		public boolean isNoNull(Double s);

		public boolean isNoNull(Integer s);

		public boolean isNoStartNull();

		public boolean isNoEndNull();

		public boolean isNoEndName();

		/** 判断是否有更改时间，主要用于更改时间后重新获取推荐上车点 */
		public boolean getIsTimeChanged();

		/** 判断是否有更改时间，主要用于更改时间后重新获取推荐上车点 */
		public void setIsTimeChanged(boolean isChanged);

		/** 根据出发地目的地跟收件人，判断是否可以展开价格信息 */
		public boolean isPriceInfo();
		/** 判断是否显示出发地跟目的地 */
		public boolean isShowStartEnd();
		/**联系人的显示还是隐藏*/
		public boolean isContactInfo();
		/**设置联系人的显示还是隐藏*/
		public void setContactInfo(boolean isContactInfo);
		/**设置全部联系人的显示还是隐藏*/
		public void setContactInfoAll(boolean isContactInfo);
        
		/**判断是否是市内城市*/
		public boolean isCity();
		/**判断是否是城际，包含拼车包车顺风*/
		public boolean isCJ();
		/**判断是否是合乘*/
		public boolean isPC();
		/**判断是否是包车*/
		public boolean isBC();
		/**判断是否顺风*/
		public boolean isSF();
		/**判断是否是快件*/
		public boolean isKJ();
		
		/**判断是否开启定位*/
		public boolean getIsLocation();
		/**设置是否开启定位*/
		public void setIsLocation(boolean isLocation);
		
		/**获取车型类型，主要用于包车跟市内，，【注意】如果是包车，则接口获取到的CarType一定要经过dealCarType处理后才能设置*/
		public NewCarType getCarType();
		
		/**设置车型类型，主要用于包车跟市内，，【注意】如果是包车，则接口获取到的CarType一定要经过dealCarType处理后才能设置*/
		public void setCarType(NewCarType mNewCarType);
		
		/**由于后台不处理，所以处理汽车类型，相同的class_id跟line_id相同的话，整理在一起，然后business_type相加*/
		public void dealCarType(int status,Object object);
		/**判断当前车型是否在夜间模式*/
		public boolean getCartTypeNight(NewCarType newCarType);
		/**处理车型名字*/
		public void setCarName(CarData data);

		/** 市内城际快件的切换动画 */
		public LayoutTransition getLayoutTransition();
		
        /**设置通话动画，主要用于展开信息*/
		public LayoutTransition getCurrencyLayoutTransition();
		
		/** 设置默认的动画 */
		public LayoutTransition getDefaultLayoutTransition();
		
		/**设置上次选择的城市*/
		public void setOldCity(String city);
		
		/**获取上次选择的上次城市*/
		public String getOldCity();
		
		/**设置锚点文字，主要用于判断是否移除当前定位城市*/
		public void setAnchorText(String anchortext);
		
		/**根据类型获取描点文字*/
		public String getAnchorText(); 
		
		/**判断锚点是否移除当前城市*/
		public boolean getAnchorIsYichu();
		
		/**记录最后一次点击的是出发地还目的地*/
		public void setRecordLastAddr(LastAddr mLastAddr);
		
		/**记录最后一次点击的是出发地还目的地*/
		public LastAddr getRecordLastAddr();
	}
}
